<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        .box {
            background-color: pink;
        }
    </style>
</head>

<body>
    <div id="test"></div>

    <!-- 引入核心库 -->
    <script type="text/javascript" src="./React-js/16.8/react.development.js"></script>
    <!-- 用于支持react操作DOM -->
    <script text="text/javascript" src="./React-js/16.8/react-dom.development.js"></script>
    <!-- 用于将jsx转换为js -->
    <script text="text/javascript" src="./React-js/16.8/babel.min.js"></script>

    <script type="text/babel">
        class Demo extends React.Component {
            state = { isHot: true }
            // 展示左侧输入框的数据
            showData = () => {
                alert(this.inp1.value)
            }

            changWeacter = () => this.setState({ isHot: !this.state.isHot })

            /**
             * ref若是以下面内联函数的方式定义，它在更新过程中会别执行两次，
             * 第一次传入参数为null，第二次才是DOM元素
             * 因为每次渲染时都会创建新的函数实例，所以React清空旧的ref，被设置新的、
             * *
             * 不过可以把回调函数定义成class的绑定函数的方式可以避免，
             * 
            */
            saveInp = (c)=>{
                this.inp2 = c; console.log('绑定函数@', c)
            }
            render() {
                const { isHot } = this.state
                // 
                return (
                    <div>
                        <h1>今天天气{this.state.isHot ? '炎热' : '很冷'}</h1>
                        {/* c：input标签。相当于往Demo身上添加了inp1属性，把input标签赋值给它。内联函数方式*/}
                        <input ref={c => { this.inp1 = c; console.log('@', c) }} type="text" placeholder="点击按钮提示数据" />
                        {/* 使用class绑定函数的方式 */}
                        <input ref={this.saveInp} type="text" placeholder="点击按钮提示数据" />
                        <button onClick={this.showData}>点击提示左侧的数据</button>&nbsp;
                        <button onClick={this.changWeacter}>点击切换天气</button>
                    </div>
                )
            }
        }

        ReactDOM.render(<Demo />, document.querySelector('#test'))
    </script>
</body>

</html>